Ynzn's Vocoder
by Christiaan Janssen
What's it?
When the first vocoder was invented, its purpose was to replace the telephone
becoming a cheeper telecomunication system. The problem was that the result wasn't good enough
to serve as a telephone: The voice seemed "robotized".
And that's the reason why it is so appreciated in modern music (not only electronic music). The
vocoder takes some caracteristics of a sample (usually a speech) and aplies them to another
signal (a synth output, an electric guitar, white noise, etc...). It's useful if you want
your voice to sound like a robot one, but it can be used on ANY signal (including drumloops,
basslines, guitar riffs, ...).
The name comes from "VOice enCODER".
How does it work?
This machine picks the module of the spectrum of the modulator. It splits into bands
and multiplies these bands with the spectrum of the carrier. In time domain this would
be something like a strange convolution, ignoring the phase of the modulator and
doing some kind of frequency-domain-low-pass-filtering (A little weird idea).
So, what it does is:
1- Get the modulator and the carrier (discussed later).
2- Transform (performing the corresponding FFTs) these two signals.
3- Split the modulator into bands.
3- Multiply them with the carrier.
4- Perform the inverse Fourier transform with the output (IFFT).
5- Interpolate the output with the previous output.
Workmodes
Due to the problems to obtain two separated signals this vocoder can
work in five different workmodes, which mean three different solutions
to this problem. They are sorted in chronological order, from the first
ones I thought about to the last ones, suggested by Volker Muehle.
The first two workmodes use a built-in tracker to get the missing signal.
In workmode 1 the input is used as modulator and the carrier is taken
from the wavetable. You have a built-in tracker that lets you specify
the note, the volume, which wave to use and some finetunning. This mode
forces the carrier to loop, but lets you change the loopin and loopout
points (you have to do it in the wavetable screen). It is a monotrack
tracker and ignores the ADSR envelope. I wanted to make it better but
I don't think it will be necessary, since you can use without problems
the other workmodes, which are more powerful.
Workmode 2 considers the input as carrier and takes the modulator from
the wavetable. It doesn't force any loop, but you can use loops if you want.
The workmode 3 needs the Ynzn's Multiplexer. It demultiplexes two
multiplexed signals (it's explained in detail with the documentation of
that machine and the Ynzn's AM), uses the low-pos one as modulator and the
high-pos one as carrier.
The workmodes 4 and 5 use an array of buffers to store the carrier. They
are inspirated from an idea of Volker Muehle. The workmode 4 stores its
input to one of the buffers of that array and clears its output. The
workmode 5 gets the signal from one of the buffers and uses it as carrier.
It consideres its input as modulator.
To use this workmodes you'll need two vocoders: one to get the carrier
and one to do the vocoding. It isn't necessary to connect them. Instead
of only one buffer there is an array of buffers because otherwise it wouldn't
be possible to use more than one vocoder per song.
Usage
P a r a m e t e r s
WorkMode | The working mode of the vocoder as explained above. |
Bands | The number of bands the modulator is splitted into. |
Antialias | Only in mode 3. It sets the bandwith of the antialias filter. |
Interpolation | The number of samples used to interpolate the beginning of the chunks with the previous chunks. This vocoder uses linear interpolation. |
Buffer | This one is used in modes 4 and 5. In this mode 4 the input goes to a buffer specified by this parameter, and the output is cleared. In mode 5 the input is used as modulator and the carrier is taken from the buffer specified by this parameter. |
Wav Volume | Only in modes 1 and 2. It's the volume of the wave taken from the wavetable. This parameter is visible only from the sequence editor. |
Note | Only in modes 1 and 2. It lets you change the note in which the wave is played. This one doesn't trig the note. This means it lets you change the "pitch" of the wave without restarting it. |
Wave Select | Only modes 1 and 2. It lets you specify which wave you want from the wavetable. It also jumps to the beggining of the wave. |
FineTune | Only 1 and 2. It lets you change the pitch from -1/2 halftone to +1/2 halftone. It's also invisible in the machine editor. |
D e t a i l s
Mode 1: Place one or several generators for the modulator. Connect them
to the vocoder. Go to the wavetable. Load the wave you want to be used as carrier. Program
the vocoder as if it was a tracker to "generate" the carrier. Play the song (there must be
a signal in the input of the vocoder).
Mode 2: Place one or several generators in the machine editor and program them to generate
the carrier. Connect them to the vocoder. Select a wave (modulator) in the wavetable. Program
the vocoder as if it was a tracker to "play" the modulator...
Mode 3: Place one or several generators for the modulator. Place and program some more for the
carrier. Place two Multiplexers. Connect the "modulators" to one of them and set its filter on.
Connect the "carriers" to the other one, set "position:High" and turn its filter on. Then place
the vocoder (mode 3) and connect the both multiplexers to it.
Mode 4+5: Place some generators for the modulator and some more for the carrier. Place two
vocoders. Connect the "carriers" to one of them and set its workmode to 4. Choose one buffer
(anyone will work, but be careful if there are other vocoders in the same song). Connect
it somewhere (it doesn't matter where, as there will be no output; but it needs to be connected
if you want it to work). Connect the "modulators" to the other one and set its workmode to 5.
Choose the same buffer as before. Okay.
Notes
This vocoder is a little clicky and very slow. The clicking
appears because there are phase differences between chunks. The solution implemented
is linear interpolation, although chunk overlapping would be better. The problem
of chunk overlapping is that it's very difficult to implement it and keep the compatibility
with Buzz without needing a huge CPU usage.
And it's slow because it performs three FFT's each time the Work() function is called.
I will gratefully listen to any comments or suggestions. Send me any feedback, questions,
asskicking tunes, suggestions, greetings (what for?), breathtaking machines, complaints,
want-to-become-part-of-the-spanish-buzz-scene messages,
dont-understand-what-the-hell-did-you-write-in-your-shitty-helpfile messages, ... =)
Bibliography and help
"Discrete-time signal processing"
Alan V Oppenheim, Ronald W Schafer
PRENTICE HALL
"Tratamiento digital de la se±al" (spanish)
JosΘ B Mari±o, Francesc Vallverd·, JosΘ A. Rodrφguez
EDICIONS UPC
"Fourier Transforms"
Robert M. Gray, Joseph W. Goodmad
KLUWER ACADEMIC PUBLISHERS
Many thanks for their help to:
Oskari Tammelin, JosΘ M¬ Sßnchez, JosΘ Luis Garcφa, Volker Muehle, J. Argⁿelles Rius
(for maintaining my machines in his web), J. R. Casas and Albert Oliveras.
And, again, SORRY FOR MY ENGLISH!!!
Author | Christiaan Janssen "Ynzn" |
cjan5813@alu-etsetb.upc.es | |
Spanish Buzz Scene: | http://members.xoom.com/arguru/home.htm |